<?php

class ProductosController extends AppController {
    var $name = 'Productos';
    var $controller_back = 'Productos';
    
    public $components = array('Paginator');
    public $helpers = array('Js');
   
    public $paginate = array(
            'limit' => 5,
            'order' => array(
                'Producto.codigo' => 'asc',
                'Producto.descripcion' => 'asc',
            )
        );        
    
    function nuevo() {
        $funcion_previa = $this->Session->read('FuncionPrevia');
        $this->set('funcion_previa', $funcion_previa);
        
        $rubros = $this->Producto->Subrubro->Rubro->find('list',array(  
                                                    'fields' => array('id', 'descripcion'), 
                                                    'conditions' => array('Rubro.activo' => 1),
                                                    'order' => 'Rubro.descripcion ASC',  
                                                    'recursive' => -1)
                                                );
        $subrubros = null;
        $this->set(compact('rubros', 'subrubros'));    
         
        if (!empty($this->data)) {
            if ($this->Producto->save($this->data)) {
                $this->Session->setFlash('El producto fue agregado.');
                switch($funcion_previa) {
                    case 'Menus':
                        $this->redirect(array('controller' => 'menus','action' => 'index'));
                        break;
                    default:
                        $this->redirect(array('controller' => 'productos','action' => 'index'));                        
                        break;
                }                
            }
        }
    }
    
    function editar($id = null) {
        $funcion_previa = $this->Session->read('FuncionPrevia');
        $this->set('funcion_previa', $funcion_previa);
       
        $this->set('rubros', $this->Producto->Subrubro->Rubro->find('list',array(  
                                                    'fields' => array('id', 'descripcion'),  
                                                    'conditions' => array('Rubro.activo' => 1),
                                                    'order' => 'Rubro.descripcion ASC',  
                                                    'recursive' => -1)
                ));

        $this->set('subrubros', $this->Producto->Subrubro->find('list',array(  
                                                    'fields' => array('id', 'descripcion'),  
                                                    'conditions' => array('Subrubro.activo' => 1),
                                                    'order' => 'Subrubro.descripcion ASC',  
                                                    'recursive' => -1)
                                                ));        
        $this->set(compact('rubros', 'subrubros'));    
        if (empty($this->request->data)) {
            $this->request->data = $this->Producto->findById($id);
            $this->request->data['Producto']['rubro_id'] = $this->request->data['Subrubro']['rubro_id'];     
        } else {
            
            // Save logic goes here
            if (!empty($this->data)) {
                $this->Producto->id = $id;
                
                if ($this->Producto->save($this->data)) {
                    $this->Session->setFlash('El producto fue actualizado.');
                    switch($funcion_previa) {
                        case 'Menus':
                            $this->redirect(array('controller' => 'menus','action' => 'index'));
                            break;
                        default:
                            $this->redirect(array('controller' => 'productos','action' => 'index'));                        
                            break;
                    }
                }   
            }
        }        
    }        
        
    function index() {
        $this->Session->write('FuncionPrevia', 'Productos');
                
        // para llegar al Rubro asociado al subrubro del producto
        $this->Producto->recursive = -1;
        if (!empty($this->data)) {
            $condiciones = array();
            if (!empty($this->data['Producto']['filtro_rubro'])) {
                $condiciones['Rubro.descripcion LIKE'] = '%'.$this->data['Producto']['filtro_rubro'].'%';
            }
            if (!empty($this->data['Producto']['filtro_subrubro'])) {
                $condiciones['Subrubro.descripcion LIKE'] = '%'.$this->data['Producto']['filtro_subrubro'].'%';
            }            
            if (!empty($this->data['Producto']['filtro_codigo'])) {
                $condiciones['Producto.codigo'] = $this->data['Producto']['filtro_codigo'];
            }
            if (!empty($this->data['Producto']['filtro_descripcion'])) {
                $condiciones['Producto.descripcion LIKE'] = '%'.$this->data['Producto']['filtro_descripcion'].'%';
            }
            if (!empty($this->data['Producto']['filtro_precio_desde'])) {
                $condiciones['Producto.precio >='] = $this->data['Producto']['filtro_precio_desde'];
            }
            if (!empty($this->data['Producto']['filtro_precio_hasta'])) {
                $condiciones['Producto.precio <='] = $this->data['Producto']['filtro_precio_hasta'];
            }
            if (!empty($this->data['Producto']['categoria'])) {
                $condiciones['Producto.categoria'] = $this->data['Producto']['categoria'];
            }
            $condiciones['Producto.activo'] = $this->data['Producto']['filtro_activo'];
            
            $this->paginate = array(
                    'fields' => array('Rubro.descripcion', 'Subrubro.descripcion',
                                        'Producto.id', 'Producto.codigo', 'Producto.descripcion', 
                                        'Producto.precio','Producto.categoria','Producto.stock','Producto.activo'),
                    'limit' => 5,
                    'order' => array('Producto.codigo' => 'asc','Producto.descripcion' => 'asc', 
                                    'Subrubro.descripcion' => 'asc', 'Rubro.descripcion' => 'asc'),
                    'conditions' => $condiciones,
                    'contain' => array('Rubro', 'Subrubro', 'Producto'),
                    'joins' => array(
                        array('table' => 'subrubros',
                                'alias' => 'Subrubro',
                                'type' => 'INNER',
                                'conditions' => array('Subrubro.id = Producto.subrubro_id')
                            ),
                        array('table' => 'rubros',
                                'alias' => 'Rubro',
                                'type' => 'INNER',
                                'conditions' => array('Rubro.id = Subrubro.rubro_id')
                            )
                        )
            );
                        
        } else {
            $condiciones = array('Producto.activo' => 1);
            $this->paginate = array(
                    'fields' => array('Rubro.descripcion', 'Subrubro.descripcion',
                                        'Producto.id', 'Producto.codigo', 'Producto.descripcion', 
                                        'Producto.precio','Producto.categoria','Producto.stock','Producto.activo'),
                    'limit' => 5,
                    'order' => array('Producto.codigo' => 'asc','Producto.descripcion' => 'asc', 
                                    'Subrubro.descripcion' => 'asc', 'Rubro.descripcion' => 'asc'),
                    'conditions' => $condiciones,
                    'contain' => array('Rubro', 'Subrubro', 'Producto'),
                    'joins' => array(
                        array('table' => 'subrubros',
                                'alias' => 'Subrubro',
                                'type' => 'INNER',
                                'conditions' => array('Subrubro.id = Producto.subrubro_id')
                            ),
                        array('table' => 'rubros',
                                'alias' => 'Rubro',
                                'type' => 'INNER',
                                'conditions' => array('Rubro.id = Subrubro.rubro_id')
                            )
                        )
                
                );
        }     

        $this->Paginator->settings = $this->paginate;
        $data = $this->Paginator->paginate('Producto');
        
        $this->set('productos', $data);
        
        $this->data = $this->Producto->create(); 
        //Debugger::dump($data[0]);
                
//        $this->set('productos', $this->Producto->find('all', array('recursive' => 3)));
    }
      
}
                
?>
